home *** CD-ROM | disk | FTP | other *** search
- C
- C ..................................................................
- C
- C SUBROUTINE CANOR
- C
- C PURPOSE
- C COMPUTE THE CANONICAL CORRELATIONS BETWEEN TWO SETS OF
- C VARIABLES. CANOR IS NORMALLY PRECEDED BY A CALL TO SUBROU-
- C TINE CORRE.
- C
- C USAGE
- C CALL CANOR (N,MP,MQ,RR,ROOTS,WLAM,CANR,CHISQ,NDF,COEFR,
- C COEFL,R)
- C
- C DESCRIPTION OF PARAMETERS
- C N - NUMBER OF OBSERVATIONS
- C MP - NUMBER OF LEFT HAND VARIABLES
- C MQ - NUMBER OF RIGHT HAND VARIABLES
- C RR - INPUT MATRIX (ONLY UPPER TRIANGULAR PORTION OF THE
- C SYMMETRIC MATRIX OF M X M, WHERE M = MP + MQ)
- C CONTAINING CORRELATION COEFFICIENTS. (STORAGE MODE
- C OF 1)
- C ROOTS - OUTPUT VECTOR OF LENGTH MQ CONTAINING EIGENVALUES
- C COMPUTED IN THE NROOT SUBROUTINE.
- C WLAM - OUTPUT VECTOR OF LENGTH MQ CONTAINING LAMBDA.
- C CANR - OUTPUT VECTOR OF LENGTH MQ CONTAINING CANONICAL
- C CORRELATIONS.
- C CHISQ - OUTPUT VECTOR OF LENGTH MQ CONTAINING THE
- C VALUES OF CHI-SQUARES.
- C NDF - OUTPUT VECTOR OF LENGTH MQ CONTAINING THE DEGREES
- C OF FREEDOM ASSOCIATED WITH CHI-SQUARES.
- C COEFR - OUTPUT MATRIX (MQ X MQ) CONTAINING MQ SETS OF
- C RIGHT HAND COEFFICIENTS COLUMNWISE.
- C COEFL - OUTPUT MATRIX (MP X MQ) CONTAINING MQ SETS OF
- C LEFT HAND COEFFICIENTS COLUMNWISE.
- C R - WORK MATRIX (M X M)
- C
- C REMARKS
- C THE NUMBER OF LEFT HAND VARIABLES (MP) SHOULD BE GREATER
- C THAN OR EQUAL TO THE NUMBER OF RIGHT HAND VARIABLES (MQ).
- C THE VALUES OF CANONICAL CORRELATION, LAMBDA, CHI-SQUARE,
- C DEGREES OF FREEDOM, AND CANONICAL COEFFICIENTS ARE COMPUTED
- C ONLY FOR THOSE EIGENVALUES IN ROOTS WHICH ARE GREATER THAN
- C ZERO.
- C
- C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
- C MINV
- C NROOT (WHICH, IN TURN, CALLS THE SUBROUTINE EIGEN.)
- C
- C METHOD
- C REFER TO W. W. COOLEY AND P. R. LOHNES, 'MULTIVARIATE PRO-
- C CEDURES FOR THE BEHAVIORAL SCIENCES', JOHN WILEY AND SONS,
- C 1962, CHAPTER 3.
- C
- C ..................................................................
- C
- SUBROUTINE CANOR (N,MP,MQ,RR,ROOTS,WLAM,CANR,CHISQ,NDF,COEFR,
- 1 COEFL,R)
- DIMENSION RR(1),ROOTS(1),WLAM(1),CANR(1),CHISQ(1),NDF(1),COEFR(1),
- 1 COEFL(1),R(1)
- C
- C ...............................................................
- C
- C IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
- C C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
- C STATEMENT WHICH FOLLOWS.
- C
- C DOUBLE PRECISION RR,ROOTS,WLAM,CANR,CHISQ,COEFR,COEFL,R,DET,SUM
- C
- C THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
- C APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
- C ROUTINE.
- C
- C THE DOUBLE PRECISION VERSION OF THIS SUBROUTINE MUST ALSO
- C CONTAIN DOUBLE PRECISION FORTRAN FUNCTIONS. SQRT IN STATEMENT
- C 165 MUST BE CHANGED TO DSQRT. ALOG IN STATEMENT 175 MUST BE
- C CHANGED TO DLOG.
- C
- C ...............................................................
- C
- C PARTITION INTERCORRELATIONS AMONG LEFT HAND VARIABLES, BETWEEN
- C LEFT AND RIGHT HAND VARIABLES, AND AMONG RIGHT HAND VARIABLES.
- C
- M=MP+MQ
- N1=0
- DO 105 I=1,M
- DO 105 J=1,M
- IF(I-J) 102, 103, 103
- 102 L=I+(J*J-J)/2
- GO TO 104
- 103 L=J+(I*I-I)/2
- 104 N1=N1+1
- 105 R(N1)=RR(L)
- L=MP
- DO 108 J=2,MP
- N1=M*(J-1)
- DO 108 I=1,MP
- L=L+1
- N1=N1+1
- 108 R(L)=R(N1)
- N2=MP+1
- L=0
- DO 110 J=N2,M
- N1=M*(J-1)
- DO 110 I=1,MP
- L=L+1
- N1=N1+1
- 110 COEFL(L)=R(N1)
- L=0
- DO 120 J=N2,M
- N1=M*(J-1)+MP
- DO 120 I=N2,M
- L=L+1
- N1=N1+1
- 120 COEFR(L)=R(N1)
- C
- C SOLVE THE CANONICAL EQUATION
- C
- L=MP*MP+1
- K=L+MP
- CALL MINV (R,MP,DET,R(L),R(K))
- C
- C CALCULATE T = INVERSE OF R11 * R12
- C
- DO 140 I=1,MP
- N2=0
- DO 130 J=1,MQ
- N1=I-MP
- ROOTS(J)=0.0
- DO 130 K=1,MP
- N1=N1+MP
- N2=N2+1
- 130 ROOTS(J)=ROOTS(J)+R(N1)*COEFL(N2)
- L=I-MP
- DO 140 J=1,MQ
- L=L+MP
- 140 R(L)=ROOTS(J)
- C
- C CALCULATE A = R21 * T
- C
- L=MP*MQ
- N3=L+1
- DO 160 J=1,MQ
- N1=0
- DO 160 I=1,MQ
- N2=MP*(J-1)
- SUM=0.0
- DO 150 K=1,MP
- N1=N1+1
- N2=N2+1
- 150 SUM=SUM+COEFL(N1)*R(N2)
- L=L+1
- 160 R(L)=SUM
- C
- C CALCULATE EIGENVALUES WITH ASSOCIATED EIGENVECTORS OF THE
- C INVERSE OF R22 * A
- C
- L=L+1
- CALL NROOT (MQ,R(N3),COEFR,ROOTS,R(L))
- C
- C FOR EACH VALUE OF I = 1, 2, ..., MQ, CALCULATE THE FOLLOWING
- C STATISTICS
- C
- DO 210 I=1,MQ
- C
- C TEST WHETHER EIGENVALUE IS GREATER THAN ZERO
- C
- IF(ROOTS(I)) 220, 220, 165
- C
- C CANONICAL CORRELATION
- C
- 165 CANR(I)= SQRT(ROOTS(I))
- C
- C CHI-SQUARE
- C
- WLAM(I)=1.0
- DO 170 J=I,MQ
- 170 WLAM(I)=WLAM(I)*(1.0-ROOTS(J))
- FN=N
- FMP=MP
- FMQ=MQ
- 175 CHISQ(I)=-(FN-0.5*(FMP+FMQ+1.0))*ALOG(WLAM(I))
- C
- C DEGREES OF FREEDOM FOR CHI-SQUARE
- C
- N1=I-1
- NDF(I)=(MP-N1)*(MQ-N1)
- C
- C I-TH SET OF RIGHT HAND COEFFICIENTS
- C
- N1=MQ*(I-1)
- N2=MQ*(I-1)+L-1
- DO 180 J=1,MQ
- N1=N1+1
- N2=N2+1
- 180 COEFR(N1)=R(N2)
- C
- C I-TH SET OF LEFT HAND COEFFICIENTS
- C
- DO 200 J=1,MP
- N1=J-MP
- N2=MQ*(I-1)
- K=MP*(I-1)+J
- COEFL(K)=0.0
- DO 190 JJ=1,MQ
- N1=N1+MP
- N2=N2+1
- 190 COEFL(K)=COEFL(K)+R(N1)*COEFR(N2)
- 200 COEFL(K)=COEFL(K)/CANR(I)
- 210 CONTINUE
- 220 RETURN
- END